// 华为德科机试@七号大米
// https://blog.csdn.net/qq_40963630/article/details/114401038
//
// (难度两星)第一个数，给出字母的范围，n表示从前n个字母中取.
// 给出字符串,求没有回文子串的下一个字符串,求不出就输出NO
// 3
// cba
// 结果：NO
// 5
// cba
// 结果：cbd
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 通过率65%
public
class Main {
 public
  static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String temp;
    while ((temp = br.readLine()) != null) {
      int n = Integer.parseInt(temp);
      StringBuilder sb = new StringBuilder(br.readLine());
      int length = sb.length();
      boolean flag0 = false;
      for (int i = length - 1; i > -1; i--) {  //从最后一个到第一个
        //从头到尾改完了，就可以break;
        boolean flag1 = false;
        //从i改到最后
        for (int j = i; j < length; j++) {
          boolean flag = false;
          //遍历字母
          for (int k = sb.charAt(j) + 1; k < n + 'a'; k++) {
            //不等于前一个也不等于前前个
            if ((j < 1 || k != sb.charAt(j - 1)) &&
                (j < 2 || k != sb.charAt(j - 2))) {
              flag = true;
              sb.replace(j, j + 1, "" + (char)k);
              break;
            }
          }
          if (!flag) {
            break;
          }
          if (flag && j == length - 1) {
            flag1 = true;
          }
        }
        if (flag1) {
          flag0 = true;
          break;
        }
      }
      if (flag0) {
        System.out.println(sb);
      } else {
        System.out.println("NO");
      }
    }
  }
}